dceaa4af002ded97aca57a3c2483d4b241095c09,ground-core/src/main/java/edu/berkeley/ground/api/models/gremlin/GremlinRichVersionFactory.java,GremlinRichVersionFactory,insertIntoDatabase,#GroundDBConnection#String#Optional#Optional#Optional#Optional#,39

Before Change


            versionVertex.property("reference", reference.get());
        }

        if (tags.isPresent()) {
            for (String key : tags.get().keySet()) {
                Tag tag = tags.get().get(key);

                List<DbDataContainer> tagInsertion = new ArrayList<>();
                tagInsertion.add(new DbDataContainer("id", GroundType.STRING, id));
                tagInsertion.add(new DbDataContainer("tkey", GroundType.STRING, key));
                tagInsertion.add(new DbDataContainer("value", GroundType.STRING, tag.getValue().map(Object::toString).orElse(null)));
                tagInsertion.add(new DbDataContainer("type", GroundType.STRING, tag.getValueType().map(Object::toString).orElse(null)));

                Vertex tagVertex = connection.addVertex("Tag", tagInsertion);
                connection.addEdge("TagConnection", versionVertex, tagVertex, new ArrayList<>());

After Change



    public void insertIntoDatabase(GroundDBConnection connectionPointer,
                                   String id,
                                   Map<String, Tag>tags,
                                   String structureVersionId,
                                   String reference,
                                   Map<String, String> parameters
    ) throws GroundException {
        GremlinConnection connection = (GremlinConnection) connectionPointer;

        List<DbDataContainer> predicates = new ArrayList<>();
        predicates.add(new DbDataContainer("id", GroundType.STRING, id));
        Vertex versionVertex = connection.getVertex(predicates);

        if (structureVersionId != null) {
            StructureVersion structureVersion = this.structureVersionFactory.retrieveFromDatabase(structureVersionId);
            RichVersionFactory.checkStructureTags(structureVersion, tags);
        }

        if (!parameters.isEmpty()) {
            Map<String, String> parametersMap = parameters;

            for (String key : parametersMap.keySet()) {
                String value = parametersMap.get(key);

                List<DbDataContainer> insertions = new ArrayList<>();
                insertions.add(new DbDataContainer("id", GroundType.STRING, id));
                insertions.add(new DbDataContainer("pkey", GroundType.STRING, key));
                insertions.add(new DbDataContainer("value", GroundType.STRING, value));

                Vertex parameterVertex = connection.addVertex("RichVersionExternalParameter", insertions);

                insertions.clear();
                connection.addEdge("RichVersionExternalParameterConnection", versionVertex, parameterVertex, insertions);
            }
        }

        if (structureVersionId != null) {
            versionVertex.property("structureversion_id", structureVersionId);
        }

        if (reference != null) {
            versionVertex.property("reference", reference);
        }

        if (!tags.isEmpty()) {
            for (String key : tags.keySet()) {
                Tag tag = tags.get(key);

                List<DbDataContainer> tagInsertion = new ArrayList<>();
                tagInsertion.add(new DbDataContainer("id", GroundType.STRING, id));
                tagInsertion.add(new DbDataContainer("tkey", GroundType.STRING, key));
                tagInsertion.add(new DbDataContainer("value", GroundType.STRING, tag.getValue()));
                tagInsertion.add(new DbDataContainer("type", GroundType.STRING, tag.getValueType()));

                Vertex tagVertex = connection.addVertex("Tag", tagInsertion);
                connection.addEdge("TagConnection", versionVertex, tagVertex, new ArrayList<>());